IPython を使ってみよう
VisualStudio や PyCharm など、とても便利で使いやすいGUIベースのIDEがあります。
それでも、Pythonプログラムの挙動を確かめたいときや、試行錯誤を繰り返すようなときや、可視化やグラフ表示するようなときでは、IPyhton を使ってみる価値はあります。
また、Webアプリケーションの Jupyter Notebook もIPython を使っていることもあり、
ここで学習することは、可視化やデータ分析を行うときにも役に立つはずです。
ipythonをインストール
IPython は拡張モジュールなので、次のようにインストールします。
code: bash
$ pip install ipython
ipython の設定
IPython は強力な対話型シェルで、pythonプログラムで試行錯誤するときにとても便利です。
ただし、ipython は python にインストールした拡張モジュールをそのままでは読めないことがあります。そうしたときは、起動前に環境変数 PYTHONPATH にモジュールがインストールされているパスを設定しておくと回避できます。
Anaconda Python を利用しているときは、利用しているCONDA環境に IPython をインストールするか、次のようにユーザのホームディレクトリにある .ipython 以下に、
profile_default/startup/00-import-system-modules.py というファイルを作成しておくと ipython 起動時に自動的に読み込んでくれます。
code: $HOME/.ipython/profile_default/startup/00-import-system-modules.py
import os, sys, glob
import site
sitepkgs = ( site.getsitepackages() +
for site_dir in sitepkgs:
for d in glob.glob( f'{site_dir}/lib/*/site-packages'):
sys.path.append(d)
sys.modules.pop('glob')
del glob
プラットフォームが Windows に場合は、ユーザホームディレクトリは環境変数%HOMEDRIVE%%HOMEPATH% に設定されていて、
Windows7や10ではC:\Users\ユーザー名 になっているはずです。
セル
IPython を起動すると、In [数値]: というプロンプトになります。
コードを実行した出力は Out[数値]: として表示されます。
アウトプットがないときは、Out[数値] は表示されずに、次のIn [数値] が表示されます。
code: IPython
Do you really want to exit (y/n)? y (py36) GoichiMacBook:exercise goichiiisaka$ ipython
Python 3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 13:42:17)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help.
ここで、マジックコマンド %save を使うと指定したセルをファイルに保存することができます。このとき、セルの指定には 1-3や1,3 といった選択指定や、範囲を指定することができます。
code: IPython
The following commands were written to file test1.py:
1 + 2
マジックコマンド %pycat は指定したファイルをシンタックスハイライト付きで表示してくれます。
code:IPython
# coding: utf-8
1 + 2
正規表現(詳しくは後述しています)などでは、試行錯誤を繰り返すことが多いのですが、都度都度、ファイルを修正して保存して実行して、といった工程が直接試せて保存できるようになります。
IPython の対話型シェルを使うことで、Windows と Linux といったプラットファーム間の差異を吸収してくれます。
マジックコマンド
IPython では次のマジックコマンドが使えます。(抜粋です)
%lsmagic:マジックコマンドの一覧
%quickref:ipython のクイック・リファレンス
わからないことがあったらコレです。
%pip:ipythonに拡張モジュールをインストールする
%pwd:現在のディレクトを表示
%mkdir / %rmdir:ディレクトリの作成/削除
%cd:ディレクトリを移動
%pushd:現在のディレクトリを記憶してから、ディレクトリ移動
%popd:記憶していたディレクトリへ移動
%ls:現在のディレクトリにあるファイルを一覧
%pycat:指定したファイルをシンタックスハイライトで表示
%load:ファイルを読み込む
%save:指定したipythonの行番号の内容をファイルとして保存する
%run:指定したファイルをipython から実行する
%timeit:指定した処理の時間を計測して表示する
マジックコマンドは2つの種類に大別できます。
ラインマジック(%で始まる)
以降のその1行の内容を引数としてコマンドに渡します。
セルマジック(%%で始まる)
そのセル内容(複数行)を渡します。
補完機能
IPython にはIDEと同じような補完機能があります。
対象はPythonのオブジェクトやキーワード、モジュール、メソッド、ファイル名やディレクトリ名も含まれます。
import pe と入力したとてに、タブキーを押下するとつ次のように候補が表示されます。
カーソルキーかEMACSスタイルのキー操作(←:Ctl-b、→:Ctl+f、↑:Ctl+p、↓:Ctl+n)でカーソルを移動させて選択することができます。
https://gyazo.com/70e0bfd3dc06bd9ee4bb9db00cf1fd46
関数などの引数渡しでの自動補完
定義済みの関数を呼び出すときにはじめにカンマ(,) もしくはセミコロン(;) に続けて関数名を記述すると、以降の文字列を関数の引数として自動的に補完して関数を呼び出してくれます。
code: IPython
...: print(a)
...:
File "<ipython-input-2-600ebd9fa086>", line 1
sample python
^
SyntaxError: invalid syntax
python
,samoke Python と記述すると IPython は sample('Python') と補完して関数を呼び出してくれます。
オブジェクトの詳細表示
code:IPython
Type: str
String form:
Length: 0
Docstring:
str(object='') -> str
str(bytes_or_bufferencoding, errors) -> str Create a new string object from the given object. If encoding or
errors is specified, then the object must expose a data buffer
that will be decoded using the given encoding and error handler.
Otherwise, returns the result of object.__str__() (if defined)
or repr(object).
encoding defaults to sys.getdefaultencoding().
errors defaults to 'strict'.
モジュールの関数にも使用できるので、使い方を知りたいときなどに便利です。
クエッション記号(?) をひとつで簡単な説明、2つでより詳しく表示されます。
code: IPython
Signature: pendulum.date(year, month, day)
Docstring: Create a new Date instance.
File: ~/anaconda3/envs/py36/lib/python3.6/site-packages/pendulum/__init__.py
Type: function
Signature: pendulum.date(year, month, day)
Source:
def date(year, month, day): # type: (int, int, int) -> Date
"""
Create a new Date instance.
"""
return Date(year, month, day)
File: ~/anaconda3/envs/py36/lib/python3.6/site-packages/pendulum/__init__.py
Type: function
コマンドヒストリー
IPython は bash などのように入力した行をカーソルキー(もしくはEMACSキー操作)で遡って表示させて、必要があればその行を編集することができます。
code: IPython
ここでカーソルキー↑(Ctl+p)で前の行に遡れます。
その行でカーソルキー←/→ (Ctl-b/ Ctl-f)でカーソルを移動させ修正できます。
code: IPython
入力されたコードはセル番号で指定して呼び出すこともできます。
code: IPython
キャッシュ
過去に入力されたコードや出力された情報は、アンダースコアに続けたキー入力で呼び出せます。コマンドヒストリーで遡れるので使用頻度は少ないかもしれませが、
結果をもう一度確認したいというような場面では便利です。
入力キャッシュ
_i:直前の入力内容
_ii:2つ前の入力内容
_iii:3つ前の入力内容
_ih[数値]:指定したセル番号の入力内容、ih(Input History)
_i数値:指定したセル番号の入力内容
出力キャッシュ
アンダースコア1つ(_) :直前の出力内容
アンダースコア2つ(__) :2つ前の出力内容
アンダースコア3つ(___) :3つ前の出力内容
_oh[数値]:指定したセル番号の出力内容、oh(Output History)
_数値:指定したセル番号の出力内容
後方検索
IPython で入力中に Ctl+rを押下すると後方検索モード(Backward Search Mode) になり、最下行に入力エリアがでてきます。
https://gyazo.com/85b22184a0ccbca234abe923a5f83c5f
この例では、後方検索モードで小文字エルのキー(l)を入力した時点で、コマンドヒストリーからそのパターンに該当するものがセルに表示されます。
外部コマンドの実行
エクスクラメーション記号(!)に続けて外部コマンドを呼び出せます。
LInuxであれば、!ls を実行すると次のようにファイル一覧ができます。
code: IPython
csv2db.py exercise2_click.py readstock_click.py
csv2db_click.py exercise2_prompt.py readstock_junky.py
csv2db_junky.py is_binary.py sample.csv
example.sql3 nyse_stocks.py test1.py
exercise2_argparser.py readstock.py
csv2db.py exercise2_click.py readstock_click.py
csv2db_click.py exercise2_prompt.py readstock_junky.py
csv2db_junky.py is_binary.py sample.csv
example.sql3 nyse_stocks.py test1.py
exercise2_argparser.py readstock.py
ファイル一覧だけであればマジックコマンド %lsも使えますが、
外部コマンドの呼び出しはその出力をPython変数に取り込むことができます。
code: IPython
'csv2db.py', 'csv2db_click.py', 'csv2db_junky.py', 'example.sql3', 'exercise2_argparser.py', 'exercise2_click.py', 'exercise2_prompt.py', 'is_binary.py', 'nyse_stocks.py', 'readstock.py', 'readstock_click.py', 'readstock_junky.py', 'sample.csv', 'test1.py' プロファイル
IPython ではプロファイルを作ることができます。
プロファイルごとにインポートするモジュールを設定しておき、切り替えて使うことができます。
まずは、次のコマンドを入力すると使用方法がわかります。
code: bash
$ ipython profile cmd -h
例
ipython profile create -h # サブコマンド create のヘルプ表示
ipython profile list # プロファイルを表示
ipython locate profile foo # プロファイル 'foo'のパスを表示
データプロット
Python では matplotlib や Seaboan、pandas などデータを可視化できるモジュールがいくつかあります。
IPython でもこれをサポートしていてプラットフォームに応じた指定をすることで、
グラフをプロットすることができます。
Jupyter Notebookの場合
code: IPython
%matplotlib inline
%pylab inline
IPython をMac で動作させている場合
code: IPython
%matplotlib osx
IPython を Windows で動作させている場合
code: IPython
%matplotlib qt
実行例
手元の Mac での実行例です。
code: IPython
In 2: %load readstock_junky.py In 3: # %load readstock_junky.py ...: from datetime import datetime
...: from pandas_datareader import data as pdr
...: import pandas as pd
...:
...: start=datetime(2015,1,1)
...: end=datetime.now()
...: df = pdr.get_data_yahoo('MSFT', start, end)
Out3: <matplotlib.axes._subplots.AxesSubplot at 0x126604be0> これを実行するとプロットされたグラフが別ウィンドウに表示されます。
Jupyter Notebook では inline とすることで、ノートブック内に表示されます。
https://gyazo.com/29208bc2f5ced4010f28d827ae3e44a2
参考: